home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / acodet1a / form1.frm next >
Text File  |  1998-06-25  |  7KB  |  209 lines

  1. VERSION 5.00
  2. Begin VB.Form Form1 
  3.    ClientHeight    =   3195
  4.    ClientLeft      =   60
  5.    ClientTop       =   60
  6.    ClientWidth     =   4770
  7.    ControlBox      =   0   'False
  8.    LinkTopic       =   "Form1"
  9.    ScaleHeight     =   3195
  10.    ScaleWidth      =   4770
  11.    ShowInTaskbar   =   0   'False
  12.    StartUpPosition =   3  'Windows Default
  13.    Begin VB.ListBox List1 
  14.       Height          =   1980
  15.       IntegralHeight  =   0   'False
  16.       ItemData        =   "Form1.frx":0000
  17.       Left            =   405
  18.       List            =   "Form1.frx":0019
  19.       TabIndex        =   0
  20.       Top             =   540
  21.       Width           =   2445
  22.    End
  23.    Begin Project1.FormDragger FormDragger1 
  24.       Align           =   1  'Align Top
  25.       Height          =   285
  26.       Left            =   0
  27.       Top             =   0
  28.       Width           =   4770
  29.       _ExtentX        =   8414
  30.       _ExtentY        =   503
  31.       Caption         =   "Docking Window Example"
  32.       RepositionForm  =   0   'False
  33.    End
  34. End
  35. Attribute VB_Name = "Form1"
  36. Attribute VB_GlobalNameSpace = False
  37. Attribute VB_Creatable = False
  38. Attribute VB_PredeclaredId = True
  39. Attribute VB_Exposed = False
  40. Option Explicit
  41.  
  42. 'Public variables used elsewhere to set values for this form's position
  43. 'and size.
  44. Dim lFloatingWidth As Long
  45. Dim lFloatingHeight As Long
  46. Dim lFloatingLeft As Long
  47. Dim lFloatingTop As Long
  48. Dim bMoving As Boolean
  49.  
  50. 'Private variables used to track moving/sizing etc.
  51. Public bDocked As Boolean
  52. Public lDockedWidth As Long
  53. Public lDockedHeight As Long
  54.  
  55. Private Sub Form_Load()
  56.     'Initialize the positions/sizes of this form
  57.     lDockedWidth = MDIForm1.Picture1.ScaleWidth + (8 * Screen.TwipsPerPixelX)
  58.     lDockedHeight = MDIForm1.Picture1.ScaleHeight + (8 * Screen.TwipsPerPixelY)
  59.     lFloatingLeft = Me.Left
  60.     lFloatingTop = Me.Top
  61.     lFloatingWidth = Me.Width
  62.     lFloatingHeight = Me.Height
  63.     'Start with the form docked in Picture1 on the MDI Form
  64.     'put Form1 in the 'Dock' and position it so its resizing border is
  65.     'hidden outside the confines of Picture1
  66.     bDocked = True
  67.     SetParent Me.hwnd, MDIForm1!Picture1.hwnd
  68.     Me.Move -4 * Screen.TwipsPerPixelX, -4 * Screen.TwipsPerPixelY, lDockedWidth, lDockedHeight
  69.     MDIForm1!Picture1.Visible = True
  70. End Sub
  71.  
  72. Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
  73.     'reset this form's owner to prevent a crash
  74.     Call SetWindowWord(Me.hwnd, SWW_HPARENT, 0&)
  75. End Sub
  76.  
  77. Private Sub Form_Resize()
  78.  
  79.     If Me.WindowState <> vbMinimized Then
  80.         'Update the stored Values
  81.         StoreFormDimensions
  82.         'position and size the listbox
  83.         List1.Move 3 * Screen.TwipsPerPixelX, FormDragger1.Height + (3 * Screen.TwipsPerPixelY), Me.ScaleWidth - (7 * Screen.TwipsPerPixelX), Me.ScaleHeight - (FormDragger1.Height + (6 * Screen.TwipsPerPixelY))
  84.     End If
  85.     
  86. End Sub
  87.  
  88. Private Sub FormDragger1_DblClick()
  89.  
  90.     'Snap the form in or out of the dock (Picture1)
  91.     bMoving = True 'stop the new dimensions being stored
  92.     If bDocked Then
  93.         'Undock
  94.         Me.Visible = False
  95.         bDocked = False
  96.         SetParent Me.hwnd, 0
  97.         Me.Move lFloatingLeft, lFloatingTop, lFloatingWidth, lFloatingHeight
  98.         MDIForm1!Picture1.Visible = False
  99.         Me.Visible = True
  100.         'make this form 'float' above the MDI form
  101.         Call SetWindowWord(Me.hwnd, SWW_HPARENT, MDIForm1.hwnd)
  102.     Else
  103.         'Dock
  104.         bDocked = True
  105.         SetParent Me.hwnd, MDIForm1!Picture1.hwnd
  106.         Me.Move -4 * Screen.TwipsPerPixelX, -4 * Screen.TwipsPerPixelY, lDockedWidth, lDockedHeight
  107.         MDIForm1!Picture1.Visible = True
  108.     End If
  109.     bMoving = False
  110.  
  111. End Sub
  112.  
  113. Private Sub FormDragger1_FormDropped(FormLeft As Long, FormTop As Long, FormWidth As Long, FormHeight As Long)
  114.     
  115.     Dim rct As RECT
  116.  
  117.     'If over Picture1 on MDIForm1 which we are using as a Dock, set parent
  118.     'of this form to Picture1, and position it at -4,-4 pixels, otherwise
  119.     'set this Form's parent to the desktop and postion it at Left,Top
  120.     'We dont need to size the form, as the DragForm control will have done
  121.     'this for us.
  122.     'For the purposes of this example, we only dock if the top left corner
  123.     'of this form is within the area bounded by Picture1
  124.     
  125.     'Get the screen based coordinates of Picture1
  126.     GetWindowRect MDIForm1!Picture1.hwnd, rct
  127.     'Inflate the rect because we want the form to be bigger than Picture1
  128.     'to hide it's border
  129.     With rct
  130.         .Left = .Left - 4
  131.         .Top = .Top - 4
  132.         .Right = .Right + 4
  133.         .Bottom = .Bottom + 4
  134.     End With
  135.     'See if the top/left corner of this form is in Picture1's screen rectangle
  136.     'As we have set RepositionForm to false, we are responsible for positioning the form
  137.     If PtInRect(rct, FormLeft, FormTop) Then
  138.         bDocked = True
  139.         SetParent Me.hwnd, MDIForm1!Picture1.hwnd
  140.         Me.Move -4 * Screen.TwipsPerPixelX, -4 * Screen.TwipsPerPixelY, lDockedWidth, lDockedHeight
  141.         MDIForm1!Picture1.Visible = True
  142.     Else
  143.         Me.Visible = False
  144.         bDocked = False
  145.         SetParent Me.hwnd, 0
  146.         Me.Move FormLeft * Screen.TwipsPerPixelX, FormTop * Screen.TwipsPerPixelY, lFloatingWidth, lFloatingHeight
  147.         MDIForm1!Picture1.Visible = False
  148.         Me.Visible = True
  149.         'make this form 'float' above the MDI form
  150.         Call SetWindowWord(Me.hwnd, SWW_HPARENT, MDIForm1.hwnd)
  151.     End If
  152.     
  153.     'reset the moving flag and store the form dimensions
  154.     bMoving = False
  155.     StoreFormDimensions
  156.  
  157. End Sub
  158.  
  159. Private Sub FormDragger1_FormMoved(FormLeft As Long, FormTop As Long, FormWidth As Long, FormHeight As Long)
  160.     
  161.     Dim rct As RECT
  162.     
  163.     'Set the moving flag so we dont store the wrong dimensions
  164.     bMoving = True
  165.     
  166.     'If over Picture1 on MDIForm1 which we are using as a Dock, change the width to that of
  167.     'Picture1, else change it to the 'floating width and height
  168.     'For the purposes of this example, we only dock if the top left corner
  169.     'of this form is within the area bounded by Picture1
  170.     
  171.     'Get the screen based coordinates of Picture1
  172.     GetWindowRect MDIForm1!Picture1.hwnd, rct
  173.     'Inflate the rect because we want the form to be bigger than Picture1
  174.     'to hide it's border
  175.     With rct
  176.         .Left = .Left - 4
  177.         .Top = .Top - 4
  178.         .Right = .Right + 4
  179.         .Bottom = .Bottom + 4
  180.     End With
  181.     'See if the top/left corner of this form is in Picture1's screen rectangle
  182.     
  183.     If PtInRect(rct, FormLeft, FormTop) Then
  184.         FormWidth = lDockedWidth / Screen.TwipsPerPixelX
  185.         FormHeight = lDockedHeight / Screen.TwipsPerPixelY
  186.     Else
  187.         FormWidth = lFloatingWidth / Screen.TwipsPerPixelX
  188.         FormHeight = lFloatingHeight / Screen.TwipsPerPixelY
  189.     End If
  190.  
  191. End Sub
  192.  
  193. Private Sub StoreFormDimensions()
  194.  
  195.    'Store the height/width values
  196.     If Not bMoving Then
  197.         If bDocked Then
  198.             lDockedWidth = Me.Width
  199.             lDockedHeight = Me.Height
  200.         Else
  201.             lFloatingLeft = Me.Left
  202.             lFloatingTop = Me.Top
  203.             lFloatingWidth = Me.Width
  204.             lFloatingHeight = Me.Height
  205.         End If
  206.     End If
  207. End Sub
  208.  
  209.